using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BerkoRules.Objects;
using Reportes;
using BerkoRules.Mappers;
using Microsoft.VisualBasic.CompilerServices;
using BerkoRules.Entities;

namespace Berko
{
    public partial class frmRptXCliente : Form
    {
        private int _index;
        private ClientesList _clientes;

        public frmRptXCliente()
        {
            InitializeComponent();
            this._clientes = null;

        }

        private void cboClientes_Validated(object sender, EventArgs e)
        {
            if (this.cboClientes.Text.Trim() != string.Empty)
            {
                if (this.cboClientes.SelectedIndex == -1)
                {
                    MessageBox.Show("El cliente no existe", "Cliente inexistente", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.cboClientes.Text = string.Empty;
                    this.cmdPatente.Enabled = false;
                    this.cmdTrabajo.Enabled = false;
                    this.cmdFecha.Enabled = false;
                }
                else
                {
                    this._index = this.cboClientes.SelectedIndex;
                    this.cmdPatente.Enabled = true;
                    this.cmdTrabajo.Enabled = true;
                    this.cmdFecha.Enabled = true;
                }
            }
        }

        private void chkTodos_CheckedChanged(object sender, EventArgs e)
        {
            int num2 = this.chkTrabajos.Items.Count - 1;
            for (int i = 0; i <= num2; i++)
            {
                this.chkTrabajos.SetItemChecked(i, this.chkTodos.Checked);
            }
        }

        private void cmdBuscar1_Click(object sender, EventArgs e)
        {
            if (this.cboClientes.Text.Trim() == string.Empty)
            {
                this._index = -1;
                MessageBox.Show("El cliente no existe", "Cliente inexistente", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.cboClientes.Text = string.Empty;
                this.cmdPatente.Enabled = false;
                this.cmdTrabajo.Enabled = false;
                this.cmdFecha.Enabled = false;
            }
            else
            {
                this._index = -1;
                int num2 = this._clientes.Count - 1;
                for (int i = 0; i <= num2; i++)
                {
                    if (this._clientes[i].cli_Nombre == this.cboClientes.Text)
                    {
                        this._index = i;
                        this.cboClientes.Text = this._clientes[i].cli_Nombre;
                        this.cmdPatente.Enabled = true;
                        this.cmdTrabajo.Enabled = true;
                        this.cmdFecha.Enabled = true;
                        this.cmdFecha.Focus();
                        break;
                    }
                }
                if (this._index == -1)
                {
                    MessageBox.Show("El cliente no existe", "Cliente inexistente", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.cboClientes.Text = string.Empty;
                    this.cmdPatente.Enabled = false;
                    this.cmdTrabajo.Enabled = false;
                    this.cmdFecha.Enabled = false;
                }
            }
        }

        private void cmdFecha_Click(object sender, EventArgs e)
        {
            DateTime time= DateTime.MinValue;
            DateTime time2 = DateTime.MinValue;
            this.Cursor = Cursors.WaitCursor;
            this.cmdFecha.Enabled = false;
            this.cmdFecha.Refresh();
            rpt_PorCliente_Fecha fecha = new rpt_PorCliente_Fecha();
            DataSet dataSet = new DataSet();
            DataTable table = new DataTable("dt_Cliente");
            DataTable table2 = new DataTable("dt_PorCliente");
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtDesde.Text!= "")
                {
                    time = DateTime.Parse(this.txtDesde.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtDesde.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtHasta.Text!= "")
                {
                    time2 = DateTime.Parse(this.txtHasta.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtHasta.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            try
            {
                table = ClientesMapper.Instance().Traer_Uno_DT(this._clientes[this._index].cli_ID).Copy();
                if (this.txtDesde.Text != "  /  /")
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Fecha(this._clientes[this._index].cli_ID, time, time2, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                else
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Fecha_SinF(this._clientes[this._index].cli_ID, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                table.TableName = "dt_Cliente";
                table2.TableName = "dt_PorCliente";
                dataSet.Tables.Add(table);
                dataSet.Tables.Add(table2);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                this.Cursor = Cursors.Default;
                this.cmdFecha.Enabled = true;
                ProjectData.ClearProjectError();
                return;
                ProjectData.ClearProjectError();
            }
            fecha.SetDataSource(dataSet);
            this.rptVisor.ReportSource = fecha;
            this.rptVisor.RefreshReport();
            this.Cursor = Cursors.Default;
            this.cmdFecha.Enabled = true;
        }

        private void cmdPatente_Click(object sender, EventArgs e)
        {
            DateTime time = DateTime.MinValue;
            DateTime time2 = DateTime.MinValue;
            this.cmdPatente.Enabled = false;
            this.cmdPatente.Refresh();
            this.Cursor = Cursors.WaitCursor;
            rpt_PorCliente_Patente patente = new rpt_PorCliente_Patente();
            DataSet dataSet = new DataSet();
            DataTable table = new DataTable("dt_Cliente");
            DataTable table2 = new DataTable("dt_PorCliente");
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtDesde.Text!= "")
                {
                    time = DateTime.Parse(this.txtDesde.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtDesde.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtHasta.Text!= "")
                {
                    time2 = DateTime.Parse(this.txtHasta.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtHasta.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            try
            {
                table = ClientesMapper.Instance().Traer_Uno_DT(this._clientes[this._index].cli_ID).Copy();
                if (this.txtDesde.Text != "  /  /")
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Patente(this._clientes[this._index].cli_ID, time, time2, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                else
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Patente_SinF(this._clientes[this._index].cli_ID, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                table.TableName = "dt_Cliente";
                table2.TableName = "dt_PorCliente";
                dataSet.Tables.Add(table);
                dataSet.Tables.Add(table2);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                this.Cursor = Cursors.Default;
                this.cmdPatente.Enabled = true;
                ProjectData.ClearProjectError();
                return;
                ProjectData.ClearProjectError();
            }
            patente.SetDataSource(dataSet);
            this.rptVisor.ReportSource = patente;
            this.rptVisor.RefreshReport();
            this.Cursor = Cursors.Default;
            this.cmdPatente.Enabled = true;
        }

        private void cmdTrabajo_Click(object sender, EventArgs e)
        {
            DateTime time = DateTime.MinValue;
            DateTime time2 = DateTime.MinValue;
            this.Cursor = Cursors.WaitCursor;
            this.cmdTrabajo.Enabled = false;
            this.cmdTrabajo.Refresh();
            rpt_PorCliente_Trabajo trabajo = new rpt_PorCliente_Trabajo();
            DataSet dataSet = new DataSet();
            DataTable table = new DataTable("dt_Cliente");
            DataTable table2 = new DataTable("dt_PorCliente");
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtDesde.Text!="")
                {
                    time = DateTime.Parse(this.txtDesde.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtDesde.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            if (this.txtDesde.Text != "  /  /")
            {
                if (this.txtHasta.Text!= "")
                {
                    time2 = DateTime.Parse(this.txtHasta.Text);
                }
                else
                {
                    MessageBox.Show("Debe ingresar una fecha v\x00e1lida", "Fecha inv\x00e1lida", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtHasta.Focus();
                    this.Cursor = Cursors.Default;
                    this.cmdPatente.Enabled = true;
                    return;
                }
            }
            try
            {
                table = ClientesMapper.Instance().Traer_Uno_DT(this._clientes[this._index].cli_ID).Copy();
                if (this.txtDesde.Text != "  /  /")
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Trabajo(this._clientes[this._index].cli_ID, time, time2, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                else
                {
                    table2 = TrabajosMapper.Instance().RPT_Por_Cliente_Trabajo_SinF(this._clientes[this._index].cli_ID, this.chkTrabajos.GetItemChecked(2), this.chkTrabajos.GetItemChecked(0), this.chkTrabajos.GetItemChecked(1), this.chkTrabajos.GetItemChecked(5), this.chkTrabajos.GetItemChecked(4), this.chkTrabajos.GetItemChecked(3)).Copy();
                }
                table.TableName = "dt_Cliente";
                table2.TableName = "dt_PorCliente";
                dataSet.Tables.Add(table);
                dataSet.Tables.Add(table2);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                this.Cursor = Cursors.Default;
                this.cmdTrabajo.Enabled = true;
                ProjectData.ClearProjectError();
                return;
                ProjectData.ClearProjectError();
            }
            trabajo.SetDataSource(dataSet);
            this.rptVisor.ReportSource = trabajo;
            this.rptVisor.RefreshReport();
            this.Cursor = Cursors.Default;
            this.cmdTrabajo.Enabled = true;
        }

        private void frmRptXPatente_Load(object sender, EventArgs e)
        {
            this.Traer_Clientes();
            int num2 = this.chkTrabajos.Items.Count - 1;
            for (int i = 0; i <= num2; i++)
            {
                this.chkTrabajos.SetItemChecked(i, true);
            }
            this.cmdFecha.Focus();
        }

        private void Traer_Clientes()
        {
            try
            {
                this._clientes = ClientesMapper.Instance().GetAll();
                this.cboClientes.DataSource = this._clientes;
                this.cboClientes.DisplayMember = "cli_Nombre";
                this.cboClientes.ValueMember = "cli_ID";
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudieron traer los clientes", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                ProjectData.ClearProjectError();
            }
        }
    }
    
}